<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/profile.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/profile.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0xJTlVYX1BST0ZJTEVfSF8w"><span class="b">_LINUX_PROFILE_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0xJTlVYX1BST0ZJTEVfSF8w"><span class="b">_LINUX_PROFILE_H</span></a>
<a name="3" /><span class="True">       3:</span> 
<a name="4" /><span class="True">       4:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">kernel</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="5" /><span class="True">       5:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">init</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="6" /><span class="True">       6:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">cpumask</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="7" /><span class="True">       7:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">cache</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="8" /><span class="True">       8:</span> 
<a name="9" /><span class="True">       9:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">errno</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="10" /><span class="True">      10:</span> 
<a name="11" /><span class="True">      11:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Q1BVX1BST0ZJTElOR18w"><span class="b">CPU_PROFILING</span></a>    <span class="c">1</span>
<a name="12" /><span class="True">      12:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0NIRURfUFJPRklMSU5HXzA_"><span class="b">SCHED_PROFILING</span></a>    <span class="c">2</span>
<a name="13" /><span class="True">      13:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0xFRVBfUFJPRklMSU5HXzA_"><span class="b">SLEEP_PROFILING</span></a>    <span class="c">3</span>
<a name="14" /><span class="True">      14:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_S1ZNX1BST0ZJTElOR18w"><span class="b">KVM_PROFILING</span></a>    <span class="c">4</span>
<a name="15" /><span class="True">      15:</span> 
<a name="16" /><span class="True">      16:</span> <span class="m">struct</span> <span class="b">proc_dir_entry</span><span class="f">;</span>
<a name="17" /><span class="True">      17:</span> <span class="m">struct</span> <span class="b">pt_regs</span><span class="f">;</span>
<a name="18" /><span class="True">      18:</span> <span class="m">struct</span> <span class="b">notifier_block</span><span class="f">;</span>
<a name="19" /><span class="True">      19:</span> 
<a name="20" /><span class="True">      20:</span> <span class="f">#</span><span class="n">if</span> <span class="b">defined</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q09ORklHX1BST0ZJTElOR18w"><span class="b">CONFIG_PROFILING</span></a><span class="f">)</span> <span class="f">&amp;&amp;</span> <span class="b">defined</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q09ORklHX1BST0NfRlNfMA__"><span class="b">CONFIG_PROC_FS</span></a><span class="f">)</span>
<a name="21" /><span class="True">      21:</span> <span class="m">void</span> <span class="b">create_prof_cpu_mask</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="22" /><span class="True">      22:</span> <span class="m">int</span> <span class="b">create_proc_profile</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="23" /><span class="False">      23:</span> <span class="f">#</span><span class="n">else</span>
<a name="24" /><span class="False">      24:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">create_prof_cpu_mask</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="25" /><span class="False">      25:</span> <span class="f">{</span>
<a name="26" /><span class="False">      26:</span> <span class="f">}</span>
<a name="27" /><span class="False">      27:</span> 
<a name="28" /><span class="False">      28:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">create_proc_profile</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="29" /><span class="False">      29:</span> <span class="f">{</span>
<a name="30" /><span class="False">      30:</span>     <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="31" /><span class="False">      31:</span> <span class="f">}</span>
<a name="32" /><span class="True">      32:</span> <span class="f">#</span><span class="n">endif</span>
<a name="33" /><span class="True">      33:</span> 
<a name="34" /><span class="True">      34:</span> <span class="m">enum</span> <span class="b">profile_type</span> <span class="f">{</span>
<a name="35" /><span class="True">      35:</span>     <span class="b">PROFILE_TASK_EXIT</span><span class="f">,</span>
<a name="36" /><span class="True">      36:</span>     <span class="b">PROFILE_MUNMAP</span>
<a name="37" /><span class="True">      37:</span> <span class="f">}</span><span class="f">;</span>
<a name="38" /><span class="True">      38:</span> 
<a name="39" /><span class="True">      39:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1BST0ZJTElOR18w"><span class="b">CONFIG_PROFILING</span></a>
<a name="40" /><span class="True">      40:</span> 
<a name="41" /><span class="True">      41:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">prof_on</span> <a href="cpu.c_macros_ref.html#_X19yZWFkX21vc3RseV8w"><span class="b">__read_mostly</span></a><span class="f">;</span>
<a name="42" /><span class="True">      42:</span> 
<a name="43" /><span class="True">      43:</span> <span class="k">/* init basic kernel profiler */</span>
<a name="44" /><span class="True">      44:</span> <span class="m">int</span> <span class="b">profile_init</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="45" /><span class="True">      45:</span> <span class="m">int</span> <span class="b">profile_setup</span><span class="f">(</span><span class="m">char</span> <span class="f">*</span><span class="b">str</span><span class="f">)</span><span class="f">;</span>
<a name="46" /><span class="True">      46:</span> <span class="m">void</span> <span class="b">profile_tick</span><span class="f">(</span><span class="m">int</span> <span class="b">type</span><span class="f">)</span><span class="f">;</span>
<a name="47" /><span class="True">      47:</span> 
<a name="48" /><span class="True">      48:</span> <span class="k">/*</span>
<a name="49" /><span class="True">      49:</span> <span class="k"> * Add multiple profiler hits to a given address:</span>
<a name="50" /><span class="True">      50:</span> <span class="k"> */</span>
<a name="51" /><span class="True">      51:</span> <span class="m">void</span> <span class="b">profile_hits</span><span class="f">(</span><span class="m">int</span> <span class="b">type</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">ip</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">nr_hits</span><span class="f">)</span><span class="f">;</span>
<a name="52" /><span class="True">      52:</span> 
<a name="53" /><span class="True">      53:</span> <span class="k">/*</span>
<a name="54" /><span class="True">      54:</span> <span class="k"> * Single profiler hit:</span>
<a name="55" /><span class="True">      55:</span> <span class="k"> */</span>
<a name="56" /><span class="True">      56:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">profile_hit</span><span class="f">(</span><span class="m">int</span> <span class="b">type</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">ip</span><span class="f">)</span>
<a name="57" /><span class="True">      57:</span> <span class="f">{</span>
<a name="58" /><span class="True">      58:</span>     <span class="k">/*</span>
<a name="59" /><span class="True">      59:</span> <span class="k">     * Speedup for the common (no profiling enabled) case:</span>
<a name="60" /><span class="True">      60:</span> <span class="k">     */</span>
<a name="61" /><span class="True">      61:</span>     <span class="m">if</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_dW5saWtlbHlfMA__"><span class="b">unlikely</span></a><span class="f">(</span><span class="b">prof_on</span> <span class="f">==</span> <span class="b">type</span><span class="f">)</span><span class="f">)</span>
<a name="62" /><span class="True">      62:</span>         <span class="b">profile_hits</span><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">ip</span><span class="f">,</span> <span class="c">1</span><span class="f">)</span><span class="f">;</span>
<a name="63" /><span class="True">      63:</span> <span class="f">}</span>
<a name="64" /><span class="True">      64:</span> 
<a name="65" /><span class="True">      65:</span> <span class="m">struct</span> <span class="b">task_struct</span><span class="f">;</span>
<a name="66" /><span class="True">      66:</span> <span class="m">struct</span> <span class="b">mm_struct</span><span class="f">;</span>
<a name="67" /><span class="True">      67:</span> 
<a name="68" /><span class="True">      68:</span> <span class="k">/* task is in do_exit() */</span>
<a name="69" /><span class="True">      69:</span> <span class="m">void</span> <span class="b">profile_task_exit</span><span class="f">(</span><span class="m">struct</span> <span class="b">task_struct</span> <span class="f">*</span> <span class="b">task</span><span class="f">)</span><span class="f">;</span>
<a name="70" /><span class="True">      70:</span> 
<a name="71" /><span class="True">      71:</span> <span class="k">/* task is dead, free task struct ? Returns 1 if</span>
<a name="72" /><span class="True">      72:</span> <span class="k"> * the task was taken, 0 if the task should be freed.</span>
<a name="73" /><span class="True">      73:</span> <span class="k"> */</span>
<a name="74" /><span class="True">      74:</span> <span class="m">int</span> <span class="b">profile_handoff_task</span><span class="f">(</span><span class="m">struct</span> <span class="b">task_struct</span> <span class="f">*</span> <span class="b">task</span><span class="f">)</span><span class="f">;</span>
<a name="75" /><span class="True">      75:</span> 
<a name="76" /><span class="True">      76:</span> <span class="k">/* sys_munmap */</span>
<a name="77" /><span class="True">      77:</span> <span class="m">void</span> <span class="b">profile_munmap</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">addr</span><span class="f">)</span><span class="f">;</span>
<a name="78" /><span class="True">      78:</span> 
<a name="79" /><span class="True">      79:</span> <span class="m">int</span> <span class="b">task_handoff_register</span><span class="f">(</span><span class="m">struct</span> <span class="b">notifier_block</span> <span class="f">*</span> <span class="b">n</span><span class="f">)</span><span class="f">;</span>
<a name="80" /><span class="True">      80:</span> <span class="m">int</span> <span class="b">task_handoff_unregister</span><span class="f">(</span><span class="m">struct</span> <span class="b">notifier_block</span> <span class="f">*</span> <span class="b">n</span><span class="f">)</span><span class="f">;</span>
<a name="81" /><span class="True">      81:</span> 
<a name="82" /><span class="True">      82:</span> <span class="m">int</span> <span class="b">profile_event_register</span><span class="f">(</span><span class="m">enum</span> <span class="b">profile_type</span><span class="f">,</span> <span class="m">struct</span> <span class="b">notifier_block</span> <span class="f">*</span> <span class="b">n</span><span class="f">)</span><span class="f">;</span>
<a name="83" /><span class="True">      83:</span> <span class="m">int</span> <span class="b">profile_event_unregister</span><span class="f">(</span><span class="m">enum</span> <span class="b">profile_type</span><span class="f">,</span> <span class="m">struct</span> <span class="b">notifier_block</span> <span class="f">*</span> <span class="b">n</span><span class="f">)</span><span class="f">;</span>
<a name="84" /><span class="True">      84:</span> 
<a name="85" /><span class="True">      85:</span> <span class="m">struct</span> <span class="b">pt_regs</span><span class="f">;</span>
<a name="86" /><span class="True">      86:</span> 
<a name="87" /><span class="False">      87:</span> <span class="f">#</span><span class="n">else</span>
<a name="88" /><span class="False">      88:</span> 
<a name="89" /><span class="False">      89:</span> <span class="f">#</span><span class="n">define</span> <span class="b">prof_on</span> <span class="c">0</span>
<a name="90" /><span class="False">      90:</span> 
<a name="91" /><span class="False">      91:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">profile_init</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="92" /><span class="False">      92:</span> <span class="f">{</span>
<a name="93" /><span class="False">      93:</span>     <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="94" /><span class="False">      94:</span> <span class="f">}</span>
<a name="95" /><span class="False">      95:</span> 
<a name="96" /><span class="False">      96:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">profile_tick</span><span class="f">(</span><span class="m">int</span> <span class="b">type</span><span class="f">)</span>
<a name="97" /><span class="False">      97:</span> <span class="f">{</span>
<a name="98" /><span class="False">      98:</span>     <span class="m">return</span><span class="f">;</span>
<a name="99" /><span class="False">      99:</span> <span class="f">}</span>
<a name="100" /><span class="False">     100:</span> 
<a name="101" /><span class="False">     101:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">profile_hits</span><span class="f">(</span><span class="m">int</span> <span class="b">type</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">ip</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">nr_hits</span><span class="f">)</span>
<a name="102" /><span class="False">     102:</span> <span class="f">{</span>
<a name="103" /><span class="False">     103:</span>     <span class="m">return</span><span class="f">;</span>
<a name="104" /><span class="False">     104:</span> <span class="f">}</span>
<a name="105" /><span class="False">     105:</span> 
<a name="106" /><span class="False">     106:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">profile_hit</span><span class="f">(</span><span class="m">int</span> <span class="b">type</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">ip</span><span class="f">)</span>
<a name="107" /><span class="False">     107:</span> <span class="f">{</span>
<a name="108" /><span class="False">     108:</span>     <span class="m">return</span><span class="f">;</span>
<a name="109" /><span class="False">     109:</span> <span class="f">}</span>
<a name="110" /><span class="False">     110:</span> 
<a name="111" /><span class="False">     111:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">task_handoff_register</span><span class="f">(</span><span class="m">struct</span> <span class="b">notifier_block</span> <span class="f">*</span> <span class="b">n</span><span class="f">)</span>
<a name="112" /><span class="False">     112:</span> <span class="f">{</span>
<a name="113" /><span class="False">     113:</span>     <span class="m">return</span> <span class="f">-</span><a href="cpu.c_macros_ref.html#_RU5PU1lTXzA_"><span class="b">ENOSYS</span></a><span class="f">;</span>
<a name="114" /><span class="False">     114:</span> <span class="f">}</span>
<a name="115" /><span class="False">     115:</span> 
<a name="116" /><span class="False">     116:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">task_handoff_unregister</span><span class="f">(</span><span class="m">struct</span> <span class="b">notifier_block</span> <span class="f">*</span> <span class="b">n</span><span class="f">)</span>
<a name="117" /><span class="False">     117:</span> <span class="f">{</span>
<a name="118" /><span class="False">     118:</span>     <span class="m">return</span> <span class="f">-</span><a href="cpu.c_macros_ref.html#_RU5PU1lTXzA_"><span class="b">ENOSYS</span></a><span class="f">;</span>
<a name="119" /><span class="False">     119:</span> <span class="f">}</span>
<a name="120" /><span class="False">     120:</span> 
<a name="121" /><span class="False">     121:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">profile_event_register</span><span class="f">(</span><span class="m">enum</span> <span class="b">profile_type</span> <span class="b">t</span><span class="f">,</span> <span class="m">struct</span> <span class="b">notifier_block</span> <span class="f">*</span> <span class="b">n</span><span class="f">)</span>
<a name="122" /><span class="False">     122:</span> <span class="f">{</span>
<a name="123" /><span class="False">     123:</span>     <span class="m">return</span> <span class="f">-</span><a href="cpu.c_macros_ref.html#_RU5PU1lTXzA_"><span class="b">ENOSYS</span></a><span class="f">;</span>
<a name="124" /><span class="False">     124:</span> <span class="f">}</span>
<a name="125" /><span class="False">     125:</span> 
<a name="126" /><span class="False">     126:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">profile_event_unregister</span><span class="f">(</span><span class="m">enum</span> <span class="b">profile_type</span> <span class="b">t</span><span class="f">,</span> <span class="m">struct</span> <span class="b">notifier_block</span> <span class="f">*</span> <span class="b">n</span><span class="f">)</span>
<a name="127" /><span class="False">     127:</span> <span class="f">{</span>
<a name="128" /><span class="False">     128:</span>     <span class="m">return</span> <span class="f">-</span><a href="cpu.c_macros_ref.html#_RU5PU1lTXzA_"><span class="b">ENOSYS</span></a><span class="f">;</span>
<a name="129" /><span class="False">     129:</span> <span class="f">}</span>
<a name="130" /><span class="False">     130:</span> 
<a name="131" /><span class="False">     131:</span> <span class="f">#</span><span class="n">define</span> <span class="b">profile_task_exit</span><span class="f">(</span><span class="b">a</span><span class="f">)</span> <span class="m">do</span> <span class="f">{</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="132" /><span class="False">     132:</span> <span class="f">#</span><span class="n">define</span> <span class="b">profile_handoff_task</span><span class="f">(</span><span class="b">a</span><span class="f">)</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="133" /><span class="False">     133:</span> <span class="f">#</span><span class="n">define</span> <span class="b">profile_munmap</span><span class="f">(</span><span class="b">a</span><span class="f">)</span> <span class="m">do</span> <span class="f">{</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="134" /><span class="False">     134:</span> 
<a name="135" /><span class="True">     135:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* CONFIG_PROFILING */</span>
<a name="136" /><span class="True">     136:</span> 
<a name="137" /><span class="True">     137:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _LINUX_PROFILE_H */</span>
<a name="138" /><span class="True">     138:</span> </pre>
  </body>
</html>
